package com.cskaoyan.javase.basic._3operator;

/**
 * 三目运算符,不是很常见很常用,但是有些场景下是比较好的选择,有自己很独特的使用场景
 * 三目（ternary）运算符，也被称之为三元运算符，即指的是需要三个操作数的运算符。
 * 它的语法是：
 * (条件表达式) ? 表达式1 : 表达式2;
 * 注: 条件表达式的结果是一个布尔值
 *
 * 它具有以下特点：
 *      1.当条件表达式为true时，执行表达式1，否则执行表达式2。
 *              实际上就是if..else
 *      2.三目运算符的最大特点就是，它一定会执行一个表达式， 所以它一定会有一个结果。
 *      3.正是由于它必须执行表达式。
 *          而语句不能放在表达式的位置，这极大的限制了三目运算符的使用。
 *          这就是三目运算符的缺点
 *
 * 比较if...else
 *      实际上if...else可以完全覆盖三目运算符使用场景,并且if...else没有表达式的限制,它更加灵活
 *      所以在开发中,有这种选择的需求时,绝大多数情况下,都会使用if...else
 * 但是三目运算符:
 *      1.严格来说,它的执行效率要比if...else高
 *      2.语法更简洁,更优雅
 *
 * 综上,在能够使用三目运算符的场景下,尽量使用三目运算符(实际开发中不多见)
 * 不能使用三目运算符,再考虑if...else(很多见)
 *
 * @since 10:45
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo4 {
    public static void main(String[] args) {
        // 需求: 求两个数的最大值
        int num1 = 10000;
        int num2 = 200;
        System.out.println((num1 > num2) ? num1 : num2);
        int max = (num1 > num2) ? num1 : num2;
        System.out.println(max);

        // 需求,求两个数的最大值,但是要求直接控制台输出这个最大值
        // (num1 > num2) ? sout : num2
        if (num1 > num2) {
            System.out.println(num1);
        } else {
            System.out.println(num2);
        }

        // 需求: 求三个数最大值
        int num3 = 30000;
        // 嵌套三目运算符
        /*
            三目运算符本身语法就很简洁
            简洁往往意味着代码优雅,意味着程序员功力深厚
            但是过于简洁的代码也会导致代码的阅读难度提升,可读性下降
            所以在代码简洁和代码可读性之间,程序员需要找到平衡点
         */
        System.out.println((num1 > num2) ? ((num1 > num3) ? num1 : num3) : ((num2 > num3) ? num2 : num3));
    }
}
